import { red, green, bold } from 'kolorist';
import fs from 'fs-extra';
import path from 'path';
import { fileURLToPath } from 'url';
import prompts from 'prompts';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// 验证项目名称
function isValidPackageName(projectName) {
    return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(projectName);
}
// 将项目名称转换为合法的包名
function toValidPackageName(projectName) {
    return projectName
        .trim()
        .toLowerCase()
        .replace(/\s+/g, '-')
        .replace(/^[._]/, '')
        .replace(/[^a-z0-9-~]+/g, '-');
}
export async function createVue3Naive(projectName) {
    let targetDir = projectName;
    if (!projectName) {
        console.log(red('✖') + ' 项目创建已取消');
        process.exit(1);
    }
    targetDir = projectName;
    // 验证项目名称
    const validatedProjectName = toValidPackageName(projectName);
    if (!isValidPackageName(validatedProjectName)) {
        console.error(red('错误：') + `项目名称 ${projectName} 不是一个有效的包名称`);
        process.exit(1);
    }
    // 检查目标目录是否已存在
    if (fs.existsSync(targetDir)) {
        const { overwrite } = await prompts({
            type: 'confirm',
            name: 'overwrite',
            message: `目标目录 ${targetDir} 已存在。是否删除现有文件并继续?`,
            initial: false
        });
        if (overwrite) {
            console.log(`\n正在删除 ${targetDir}...`);
            await fs.remove(targetDir);
        }
        else {
            console.log(red('✖') + ' 操作取消');
            process.exit(1);
        }
    }
    console.log(`\n正在创建项目 ${green(targetDir)}...`);
    // 获取模板目录路径
    const templateDir = path.resolve(__dirname);
    try {
        // 创建项目目录
        await fs.ensureDir(targetDir);
        // 复制模板文件
        const filesToCopy = await fs.readdir(templateDir);
        for (const file of filesToCopy) {
            // 跳过index.ts/index.js文件，因为这是CLI工具本身
            if (file === 'index.ts' || file === 'index.js')
                continue;
            await fs.copy(path.join(templateDir, file), path.join(targetDir, file));
        }
        // 更新项目的package.json
        const pkgPath = path.join(targetDir, 'package.json');
        const pkg = await fs.readJson(pkgPath);
        pkg.name = validatedProjectName;
        await fs.writeJson(pkgPath, pkg, { spaces: 2 });
        console.log(`\n${green('✔')} 项目创建成功！执行以下命令开始开发：\n`);
        console.log(bold(`  cd ${targetDir}`));
        console.log(bold('  pnpm install'));
        console.log(bold('  pnpm dev\n'));
    }
    catch (err) {
        console.error(red('错误：') + err);
        process.exit(1);
    }
}
// 这个函数现在应该只在主入口(index.ts)中被调用
// 移除此处的直接调用
